import typeMap from '@/components/Form/utils/type-map'
import typeValue from '@/components/Form/utils/type'

/**
 * @export 是否填写
 * @param {*} value
 */
export function isRequired (value) {
  // Array
  if (Array.isArray(value)) {
    if (value.length > 0) {
      return true
    }
    return false
  }

  // string || other
  if (value.toString()) {
    return true
  }

  return false
}

/**
 * @export 必填验证
 * @param {*} required 必填
 * @param {*} message 提示信息
 * @return {*}
 */
export function validateRequired (type, required, message) {
  const validator = (rule, value, callback = (e) => e) => {
    console.log(rule, value, callback, 'dd=dd')
    if (required) {
      if (!isRequired(value)) {
        callback(message)
        return new Error(message)
      }
      callback()
      return true
    }
    callback()
    return true
  }
  return { validator }
}

/**
 * @export 类型验证
 * @param {*} type 类型
 */
export function validateType (type, message) {
  const map_key = typeMap[type]

  const validator = (rule, value, callback = (e) => e) => {
    if (typeValue[map_key] && isRequired(value)) {
      const { reg, label } = typeValue[map_key]

      if (!reg.test(value)) {
        const mesg = `请${message}${label}类型！`
        callback(mesg)
        return new Error()
      }
      callback()
      return true
    }
    callback()
    return true
  }
  return { validator }
}

/**
 * @export 长度和大小验证
 * @param {*} { min, max, type }
 * @return {*}
 */
// export function validateSizeLen({ fields, type }) {
//   const map_key = typeMap[type];
//   const {
//     number, zh_cn, abc, no
//   } = typeValue;
//   const { verification } = fields;
//   const {
//     max_length, min_length, min, max
//   } = verification;

// "数字": 'number',
// '字母': 'abc',
// "中文": "zh_cn",
// '邮箱': "email",
// '手机': "mobile",
// '身份证': "id_card"
// '不限': 'no'

// switch (map_key) {
//   case number.type:
//     return validateNumSize({ min, max });

// case zh_cn.type:
// case abc.type:
//   return validateStrLen({ min_length, max_length });
//     default:
//       return validateStrLen({ min_length, max_length });
//   }
// }
